动态应用 |
您所在的位置:网站首页 › python app框架 › 动态应用 |
还是目前中文文档没有的内容,原文:Dynamic Applications | Sanic Framework。 我们优化了通过命令行运行 Sanic 应用的工作。如果你还不了解的话,最好在读这篇文章前去看一下 运行 Sanic 以获取一些详细的信息。 可以指定全局变量来启动应用: $ sanic path.to.server:app对应的 server.py 的代码为: app = Sanic("TestApp") @app.get("/") async def handler(request: Request): return json({"foo": "bar"})我们也可以指定某返回 Sanic 实例的工厂函数来启动: sanic path.to.server:create_app --factory对应的 server.py 的代码为: # server.py def create_app(): app = Sanic("TestApp") @app.get("/") async def handler(request: Request): return json({"foo": "bar"}) return app但有些时候,在更复杂的应用中,这些功能显得捉襟见肘: 在 22.9 的版本中,Sanic 添加了负责在各个工作进程中创建一个应用程序 AppLoader ,如果你需要更加「动态」的运行体验,那可以用一下它。 我们可以将一个能够返回 Sanic 实例的工厂函数给 AppLoader 。AppLoader 可以和更底层的运行应用的 API 一起使用。 import sys from functools import partial from sanic import Request, Sanic, json from sanic.worker.loader import AppLoader def attach_endpoints(app: Sanic): @app.get("/") async def handler(request: Request): return json({"app_name": request.app.name}) def create_app(app_name: str) -> Sanic: app = Sanic(app_name) attach_endpoints(app) return app if __name__ == "__main__": app_name = sys.argv[-1] loader = AppLoader(factory=partial(create_app, app_name)) app = loader.load() app.prepare(port=9999, dev=True) Sanic.serve(primary=app, app_loader=loader)我们就只需要简单的: python path/to/server.py ARealManPlaysBasketballWell即可。 在这个例子中,AppLoader 与 factory 传入的可用于在不同进程中创建同一应用的拷贝的函数一起被创建。然后你需要显式地使用 Sanic.serve ,这样你的 AppLoader 就不会被 app.run 中自动生成的应用替换。 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |